<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var sbol = Symbol('a');
    //对象生成方法 属性名（property） => 属性值（键值）  1：属性名应尽量使用字母 2:每一个property后使用逗号连接 3：后期更改
    var obj = {
        name:'小明',
        age:'20',
        children:{
            name:'小刚'
        }
    }
    obj[sbol] = "i is symbol"
    console.log(obj)
    console.log(Object.getOwnPropertySymbols(obj))
    //如果属性的值还是一个对象，就形成了链式引用。
    console.log(obj.children.name)
    //对象引用
    var o1 = {a:1};
    var o2 = o1;
    o2.a = "2";
    console.log(o1.a)
    console.log(o2.a)
    o1.a = "3"
    console.log(o2)
    //!!!! 非引用类型不存在堆区
    var o3 = {};
    var o4 = o3;
    o3 = "我是o3"
    console.log(o4)
    //属性读取
    var readObj = {
        name:'属性读取'
    }
    console.log(readObj.name); //直接读取
    var rn = 'name'
    console.log(readObj[rn]) //读取值是一个字符串的时候
    //查看一个对象本身的所有属性，可以使用Object.keys方法。
    var arObj = {
        name:'林耀东',
        age:32,
        shenfen:'毒枭',
        name:'你呢'
    }
    console.log(Object.keys(arObj))
    //delete 命令 delete命令用于删除对象的属性，删除成功后返回true。
    console.log(delete arObj.shenfen)
    console.log(arObj)
    console.log(delete arObj.address) //不能通过删除成功判断属性是否存在
    //in 运算符 in运算符用于检查对象是否包含某个属性（注意，检查的是键名，不是键值），如果包含就返回true，否则返回false。
    console.log('names' in arObj)
    //for in 遍历 可以枚举原型链上的属性 Object.key()是不可枚举的
    for (const i in arObj) {
        if (arObj.hasOwnProperty(i)) { //判断是否为自身属性
            console.log(i)
        } 
    }
    //with 语句 （变量需要是已经存在的property，否则返回undefined）
    with(arObj){
        address = "塔寨村",
        othersf = "人大代表",
        age = 33
    }
    console.log(arObj)
    //对象方法
    var aobj = {a:1};
    Object.prototype.toast = function(str){
      console.log('im is str')
    };
    var bobj = Object.create(aobj);
    bobj.a = 2;
    console.log(bobj.a)
    console.log(aobj)
    bobj.toast()
    //function
    function sum(){

    }
    var jsum = function(){

    }
    function aa(){
       console.log(arguments)
    }
    aa(1,23,4)
</script>
</body>
</html>